// pages/profile/profile.js
import * as api from '../../services/api';
import { auth } from '../../utils/auth';

// 安全导入Toast组件
let Toast;
try {
  Toast = require('@vant/weapp/toast/toast');
} catch (e) {
  console.warn('无法加载Vant Toast组件，将使用原生提示');
}

Page({
  data: {
    userInfo: {
      avatarUrl: '/images/default-avatar.png'
    },
    tempAvatarUrl: '/images/default-avatar.png', // 临时头像URL，用于解决HTTP图片显示问题
    
    // 统计数据
    stats: {
      capsuleCount: 0,
      entryCount: 0,
      photoCount: 0,
      videoCount: 0,
      audioCount: 0,
      
      moodStats: {
        happy: 0,
        sad: 0,
        angry: 0,
        excited: 0,
        calm: 0,
        anxious: 0
      },
      
      activityStats: {
        totalDays: 0,
        activeDays: 0,
        streakDays: 0,
        longestStreak: 0,
        weeklyAverage: 0
      },
      
      interactionStats: {
        messagesExchanged: 0,
        photosShared: 0,
        momentsCreated: 0,
        gamesPlayed: 0,
        achievementsUnlocked: 0
      },
      
      healthStats: {},
      
      growthStats: {
        goalsSet: 0,
        goalsCompleted: 0,
        habitsFormed: 0,
        skillsLearned: 0,
        booksRead: 0
      }
    },
    
    // 数据洞察
    insights: {
      moodAnalysis: {},
      relationshipInsights: {},
      recommendations: {}
    },
    
    // UI状态
    activeTab: 'overview',
    isHeaderScrolled: false,
    loading: true,
    showSettingsModal: false,
    
    // 主题相关
    theme: 'his',
    relationshipIndex: 0,
    
    // 设置选项
    settings: {
      notifications: true,
      dataSync: true,
      privacyMode: false,
      autoBackup: true,
      shareAnalytics: false
    },
    
    // 成就系统
    achievements: {
      unlocked: [],
      locked: [],
      categories: [
        { id: 'love', name: '爱情达人', icon: '💕' },
        { id: 'memory', name: '回忆收藏家', icon: '📸' },
        { id: 'growth', name: '成长先锋', icon: '🌱' },
        { id: 'health', name: '健康守护者', icon: '💪' },
        { id: 'creativity', name: '创意大师', icon: '🎨' }
      ]
    },
    
    // 图表数据
    moodChartData: []
  },

  onLoad(options) {
    // 设置初始默认值
    this.setData({
      loading: true,
      'userInfo.avatarUrl': '/images/default-avatar.png',
      tempAvatarUrl: '/images/default-avatar.png'
    });
    
    // 检查用户是否已登录
    const token = wx.getStorageSync('token');
    const userInfo = wx.getStorageSync('userInfo');
    const user = wx.getStorageSync('user');
    
    // 检查多种可能的登录状态存储方式
    if (!token || (!userInfo && !user)) {
      // 用户未登录，跳转到登录页面
      wx.redirectTo({
        url: '/pages/login/login'
      });
      return;
    }
    
    // 如果有user但没有userInfo，将user设置为userInfo
    if (user && !userInfo) {
      wx.setStorageSync('userInfo', user);
    }
    
    this.initTheme();
    
    // 等待所有数据加载完成后再隐藏loading状态
    Promise.all([
      this.loadUserInfo(),
      this.loadStats(),
      this.loadInsights(),
      this.loadAchievements()
    ]).then(() => {
      this.generateChartData();
      this.setData({ loading: false });
    }).catch(error => {
      console.error('加载数据时出错:', error);
      this.generateChartData();
      this.setData({ loading: false });
    });
  },

  onShow() {
    this.refreshData()
  },

  // 监听页面滚动
  onPageScroll(e) {
    const scrollTop = e.scrollTop;
    const isHeaderScrolled = scrollTop > 10;
    
    if (isHeaderScrolled !== this.data.isHeaderScrolled) {
      this.setData({
        isHeaderScrolled: isHeaderScrolled
      });
    }
  },

  onUnload() {
    // 清理定时器等资源
  },

  // 初始化主题
  initTheme() {
    const userRole = wx.getStorageSync('userRole') || 'his'
    this.setData({
      theme: userRole,
      'userInfo.role': userRole
    })
  },

  // 加载用户信息
  async loadUserInfo() {
    try {
      // 从API获取用户信息
      const userData = await api.userApi.getProfile();
      if (userData && userData.data) {
        // 获取用户角色信息
        const userRole = auth.getUserRole()
        const isAdmin = auth.isAdmin()
        const isPartner = auth.isPartner()
        
        // 确保头像URL存在，如果不存在则使用默认头像
        const avatarUrl = userData.data.avatarUrl || '/images/default-avatar.png';
        
        this.setData({
          userInfo: {
            ...this.data.userInfo,
            ...userData.data,
            avatarUrl: avatarUrl,
            isAdmin: isAdmin,
            isPartner: isPartner,
            roleType: userRole?.roleType || '',
            roleName: userRole?.roleName || ''
          }
        })
        
        // 保存到本地存储
        wx.setStorageSync('userInfo', {
          ...userData.data,
          avatarUrl: avatarUrl
        });
        
        // 根据用户角色设置主题
        this.initTheme()
      }
    } catch (error) {
      console.error('加载用户信息失败:', error)
      Toast && Toast.fail ? Toast.fail('加载用户信息失败') : wx.showToast({ title: '加载用户信息失败', icon: 'none' })
      
      // 出错时使用本地存储的数据或默认数据
      const storedUserInfo = wx.getStorageSync('userInfo');
      if (storedUserInfo) {
        // 确保头像URL存在
        const avatarUrl = storedUserInfo.avatarUrl || '/images/default-avatar.png';
        this.setData({
          userInfo: {
            ...this.data.userInfo,
            ...storedUserInfo,
            avatarUrl: avatarUrl
          }
        });
      } else {
        // 使用默认用户信息
        this.setData({
          userInfo: {
            ...this.data.userInfo,
            avatarUrl: '/images/default-avatar.png',
            nickName: '用户'
          }
        });
      }
    }
  },

  // 加载统计数据
  async loadStats() {
    try {
      const statsData = await api.userApi.getStats();
      if (statsData && statsData.data) {
        this.setData({
          stats: { ...this.data.stats, ...statsData.data }
        });
        
        // 保存到本地存储
        wx.setStorageSync('userStats', statsData.data);
      }
    } catch (error) {
      console.error('加载统计数据失败:', error);
      
      // 降级到本地存储或默认数据
      const stats = wx.getStorageSync('userStats') || {}
      const defaultStats = {
        capsuleCount: Math.floor(Math.random() * 50) + 10,
        entryCount: Math.floor(Math.random() * 200) + 50,
        photoCount: Math.floor(Math.random() * 100) + 20,
        videoCount: Math.floor(Math.random() * 30) + 5,
        audioCount: Math.floor(Math.random() * 40) + 8,
        
        moodStats: {
          happy: Math.floor(Math.random() * 30) + 20,
          sad: Math.floor(Math.random() * 10) + 2,
          angry: Math.floor(Math.random() * 5) + 1,
          excited: Math.floor(Math.random() * 25) + 15,
          calm: Math.floor(Math.random() * 35) + 25,
          anxious: Math.floor(Math.random() * 8) + 2
        },
        
        activityStats: {
          totalDays: Math.floor(Math.random() * 200) + 100,
          activeDays: Math.floor(Math.random() * 150) + 80,
          streakDays: Math.floor(Math.random() * 30) + 5,
          longestStreak: Math.floor(Math.random() * 60) + 20,
          weeklyAverage: Math.floor(Math.random() * 5) + 3
        },
        
        interactionStats: {
          messagesExchanged: Math.floor(Math.random() * 1000) + 500,
          photosShared: Math.floor(Math.random() * 200) + 100,
          momentsCreated: Math.floor(Math.random() * 80) + 30,
          gamesPlayed: Math.floor(Math.random() * 50) + 20,
          achievementsUnlocked: Math.floor(Math.random() * 20) + 5
        },
        
        healthStats: this.data.theme === 'hers' ? {
          cycleTracked: Math.floor(Math.random() * 12) + 6,
          symptomsLogged: Math.floor(Math.random() * 100) + 50,
          moodTracked: Math.floor(Math.random() * 200) + 100,
          predictionsAccuracy: Math.floor(Math.random() * 30) + 70
        } : {},
        
        growthStats: {
          goalsSet: Math.floor(Math.random() * 20) + 10,
          goalsCompleted: Math.floor(Math.random() * 15) + 8,
          habitsFormed: Math.floor(Math.random() * 10) + 5,
          skillsLearned: Math.floor(Math.random() * 8) + 3,
          booksRead: Math.floor(Math.random() * 15) + 5
        }
      }
      
      this.setData({
        stats: { ...this.data.stats, ...defaultStats, ...stats }
      })
    }
  },

  // 加载数据洞察
  async loadInsights() {
    try {
      // 这里应该调用API获取真实数据，暂时使用本地存储或默认数据
      const insights = wx.getStorageSync('userInsights') || {}
      const defaultInsights = {
        moodAnalysis: {
          dominantMood: ['快乐', '平静', '兴奋'][Math.floor(Math.random() * 3)],
          moodTrends: [
            { month: '1月', value: 75 },
            { month: '2月', value: 82 },
            { month: '3月', value: 78 },
            { month: '4月', value: 85 },
            { month: '5月', value: 88 },
            { month: '6月', value: 90 }
          ],
          stressFactors: ['工作压力', '时间管理', '沟通问题'],
          happinessTriggers: ['户外活动', '音乐', '与伴侣交流']
        },
        relationshipInsights: {
          communicationStyle: ['直接型', '委婉型', '情感型'][Math.floor(Math.random() * 3)],
          loveLanguage: ['陪伴', '礼物', '肯定'][Math.floor(Math.random() * 3)],
          compatibilityScore: Math.floor(Math.random() * 30) + 70,
          sharedInterests: ['旅行', '美食', '电影'],
          growthOpportunities: ['增强沟通', '共同目标', '时间管理']
        },
        recommendations: {
          activities: ['户外徒步', '烹饪课程', '艺术展览'],
          goals: ['每日记录心情', '每周一次约会', '每月一次旅行'],
          improvements: ['情绪管理', '压力缓解', '健康生活']
        }
      }
      
      this.setData({
        insights: { ...this.data.insights, ...defaultInsights, ...insights }
      })
    } catch (error) {
      console.error('加载数据洞察失败:', error);
    }
  },

  // 加载成就
  loadAchievements() {
    const unlocked = [
      { id: 1, name: '初次见面', desc: '创建第一个胶囊', icon: '👋', date: '2023-01-01' },
      { id: 2, name: '记录达人', desc: '创建10个胶囊', icon: '📝', date: '2023-02-15' },
      { id: 3, name: '情感专家', desc: '连续记录30天', icon: '💕', date: '2023-03-20' }
    ]
    
    const locked = [
      { id: 4, name: '回忆收藏家', desc: '创建50个胶囊', icon: '📸', progress: 24, target: 50 },
      { id: 5, name: '时光旅人', desc: '创建100个胶囊', icon: '⏳', progress: 24, target: 100 },
      { id: 6, name: '情感大师', desc: '连续记录100天', icon: '🏆', progress: 30, target: 100 }
    ]
    
    this.setData({
      'achievements.unlocked': unlocked,
      'achievements.locked': locked
    })
  },

  // 生成图表数据
  generateChartData() {
    const moodStats = this.data.stats.moodStats;
    const maxValue = Math.max(...Object.values(moodStats));
    
    const moodChartData = Object.keys(moodStats).map(key => {
      const labels = {
        happy: '快乐',
        sad: '悲伤',
        angry: '愤怒',
        excited: '兴奋',
        calm: '平静',
        anxious: '焦虑'
      };
      
      return {
        label: labels[key],
        value: moodStats[key],
        height: (moodStats[key] / maxValue) * 100
      };
    });
    
    this.setData({
      moodChartData
    });
  },

  // 刷新数据
  refreshData() {
    // 显示加载状态
    this.setData({ loading: true });
    
    // 等待所有数据加载完成后再隐藏loading状态
    Promise.all([
      this.loadUserInfo(),
      this.loadStats(),
      this.loadInsights(),
      this.loadAchievements()
    ]).then(() => {
      this.generateChartData();
      this.setData({ loading: false });
    }).catch(error => {
      console.error('刷新数据时出错:', error);
      this.generateChartData();
      this.setData({ loading: false });
    });
  },

  // 返回上一页
  onBack() {
    wx.navigateBack()
  },

  // 显示设置
  onShowSettings() {
    this.setData({
      showSettingsModal: true
    })
  },

  // 切换标签页
  onSwitchTab(e) {
    const tab = e.currentTarget.dataset.tab
    this.setData({
      activeTab: tab
    })
  },

  // 头像加载错误处理
  onAvatarLoadError(e) {
    console.log('头像加载失败', e);
    // 当网络图片加载失败时，使用默认头像
    this.setData({
      'userInfo.avatarUrl': '/images/default-avatar.png',
      tempAvatarUrl: '/images/default-avatar.png'
    });
    
    // 显示提示信息
    wx.showToast({
      title: '头像加载失败，已显示默认头像',
      icon: 'none',
      duration: 2000
    });
  },

  // 头像更换
  onChangeAvatar() {
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        const tempFilePath = res.tempFilePaths[0]
        
        // 显示上传中提示
        wx.showLoading({
          title: '上传中...'
        })
        
        // 临时显示选择的图片
        this.setData({
          tempAvatarUrl: tempFilePath
        })
        
        // 获取基础URL
        const app = getApp()
        // 确保使用正确的API基础URL
        const baseURL = app.globalData.apiBase || (app.globalData.baseUrl ? app.globalData.baseUrl + '/api' : 'http://localhost:8080/api')
        
        // 上传头像到服务器
        const token = wx.getStorageSync('token')
        if (!token) {
          wx.hideLoading()
          Toast && Toast.fail ? Toast.fail('用户未登录') : wx.showToast({
            title: '用户未登录',
            icon: 'none'
          })
          return
        }
        
        console.log('开始上传文件，URL:', `${baseURL}/files/upload/image`)
        console.log('Token:', token)
        
        wx.uploadFile({
          url: `${baseURL}/files/upload/image`,
          filePath: tempFilePath,
          name: 'file',
          header: {
            'Authorization': `Bearer ${token}`,
            'X-Requested-With': 'XMLHttpRequest'
          },
          success: (uploadRes) => {
            console.log('服务器响应状态:', uploadRes.statusCode)
            console.log('服务器响应:', uploadRes)
            
            // 检查响应状态码
            if (uploadRes.statusCode === 401 || uploadRes.statusCode === 403) {
              console.error('权限验证失败，状态码:', uploadRes.statusCode)
              Toast && Toast.fail ? Toast.fail('权限验证失败，请重新登录') : wx.showToast({
                title: '权限验证失败，请重新登录',
                icon: 'none'
              })
              // 可以考虑跳转到登录页面
              return
            }
            
            if (uploadRes.statusCode !== 200) {
              console.error('上传失败，状态码:', uploadRes.statusCode)
              Toast && Toast.fail ? Toast.fail('上传失败，请稍后重试') : wx.showToast({
                title: '上传失败，请稍后重试',
                icon: 'none'
              })
              return
            }
            
            try {
              const data = JSON.parse(uploadRes.data)
              console.log('解析后的响应数据:', data)
              
              if (data.code === 0 && data.data && data.data.fileUrl) {
                // 上传成功，更新用户头像
                const fileUrl = data.data.fileUrl
                console.log('文件上传成功，URL:', fileUrl)
                
                // 更新用户信息
                this.setData({
                  'userInfo.avatarUrl': fileUrl,
                  tempAvatarUrl: ''
                })
                
                // 保存到本地存储
                const userInfo = wx.getStorageSync('userInfo') || {}
                userInfo.avatarUrl = fileUrl
                wx.setStorageSync('userInfo', userInfo)
                
                // 更新服务器上的用户信息
                api.userApi.updateProfile({ avatarUrl: fileUrl })
                  .then(() => {
                    Toast && Toast.success ? Toast.success('头像更新成功') : wx.showToast({
                      title: '头像更新成功',
                      icon: 'success'
                    })
                  })
                  .catch(error => {
                    console.error('更新服务器头像信息失败:', error);
                    Toast && Toast.success ? Toast.success('头像上传成功') : wx.showToast({
                      title: '头像上传成功',
                      icon: 'success'
                    })
                  });
              } else {
                console.error('上传响应格式不正确:', data)
                Toast && Toast.fail ? Toast.fail(data.message || '上传失败') : wx.showToast({
                  title: data.message || '上传失败',
                  icon: 'none'
                })
              }
            } catch (parseError) {
              console.error('解析上传响应失败:', parseError)
              Toast && Toast.fail ? Toast.fail('上传响应解析失败') : wx.showToast({
                title: '上传响应解析失败',
                icon: 'none'
              })
            }
          },
          fail: (error) => {
            console.error('上传文件失败:', error)
            Toast && Toast.fail ? Toast.fail('上传失败') : wx.showToast({
              title: '上传失败',
              icon: 'none'
            })
          },
          complete: () => {
            wx.hideLoading()
          }
        })
      },
      fail: (error) => {
        console.error('选择图片失败:', error)
        if (error.errMsg && !error.errMsg.includes('cancel')) {
          Toast && Toast.fail ? Toast.fail('选择图片失败') : wx.showToast({
            title: '选择图片失败',
            icon: 'none'
          })
        }
      }
    })
  },

  // 昵称变更
  onNicknameChange(e) {
    const nickname = e.detail.value
    this.setData({
      'userInfo.nickname': nickname
    })
    
    // 保存到本地存储
    const userInfo = wx.getStorageSync('userInfo') || {}
    userInfo.nickname = nickname
    wx.setStorageSync('userInfo', userInfo)
    
    // 更新服务器上的用户信息
    api.userApi.updateProfile({ nickname: nickname })
      .catch(error => {
        console.error('更新服务器昵称失败:', error);
      });
  },

  // 情感状态变更
  onRelationshipChange(e) {
    const index = e.detail.value
    this.setData({
      relationshipIndex: index
    })
    
    // 保存到本地存储
    const userInfo = wx.getStorageSync('userInfo') || {}
    userInfo.relationship = this.data.relationshipStatus[index]
    wx.setStorageSync('userInfo', userInfo)
    
    // 更新服务器上的用户信息
    api.userApi.updateProfile({ relationship: this.data.relationshipStatus[index] })
      .catch(error => {
        console.error('更新服务器情感状态失败:', error);
      });
  },

  // 管理角色（管理员功能）
  onManageRoles() {
    if (!this.data.userInfo.isAdmin) {
      Toast && Toast.fail ? Toast.fail('无权限访问') : wx.showToast({
        title: '无权限访问',
        icon: 'none'
      })
      return
    }
    
    wx.navigateTo({
      url: '/pages/role-management/index'
    })
  },

  // 系统管理（管理员功能）
  onManageSystem() {
    if (!this.data.userInfo.isAdmin) {
      Toast && Toast.fail ? Toast.fail('无权限访问') : wx.showToast({
        title: '无权限访问',
        icon: 'none'
      })
      return
    }
    
    wx.showToast({
      title: '系统管理功能开发中',
      icon: 'none'
    })
  },

  // 查看日志（管理员功能）
  onViewLogs() {
    if (!this.data.userInfo.isAdmin) {
      Toast && Toast.fail ? Toast.fail('无权限访问') : wx.showToast({
        title: '无权限访问',
        icon: 'none'
      })
      return
    }
    
    wx.showToast({
      title: '操作日志功能开发中',
      icon: 'none'
    })
  },

  // 查看共享胶囊（情侣功能）
  onViewSharedCapsules() {
    wx.showToast({
      title: '共享胶囊功能开发中',
      icon: 'none'
    })
  },

  // 查看情侣统计（情侣功能）
  onViewCoupleStats() {
    wx.showToast({
      title: '情侣统计功能开发中',
      icon: 'none'
    })
  },
  
  // 回忆游戏（情侣功能）
  onMemoryGame() {
    wx.showToast({
      title: '回忆游戏功能开发中',
      icon: 'none'
    })
  },
  
  // 未来信件（情侣功能）
  onFutureLetters() {
    wx.showToast({
      title: '未来信件功能开发中',
      icon: 'none'
    })
  },
  
  // 情侣绑定（情侣功能）
  onBindPartner() {
    wx.navigateTo({
      url: '/pages/bind-partner/bind-partner'
    })
  }
})